SftpとApacheの両方からファイルへの書き込みができる様にいい感じに設定する
こんにちは、岩本です。
WEBアプリケーションを利用する際に、メンテナンスのためWEBアプリケーションが生成したファイルを メンテナンス用のユーザーで編集したいといった場合があると思います。
その際の、Apache(httpd)とSFTP(sshd)の設定の覚書です。
やりたいこと
- ユーザーにアップロードされたファイルに、WEBアプリケーションから編集を行いたい
- WEBアプリケーションで生成されたファイルを、ユーザーから編集を行いたい
やること
まず、標準の設定では、Apacheで生成されるファイルのパーミッションは下記のようになります。
# ls -lah -rw-r--r-- 1 apache apache 17 Mar 13 04:55 testfile
上記を踏まえ、SFTP/Apache双方からアクセスが可能な様に、下記の設定を行います。
- SFTPのユーザーのプライマリグループをApacheユーザーグループに変更する
- SFTP(sshd)のUmaskを設定する
- ApacheのUmaskを設定する
- コンテンツのパーミッションを適切に設定する
設定
SFTPのユーザーのプライマリグループをApacheユーザーグループに変更する
SFTPユーザーsftpuser01
がapacheユーザーグループのファイルにアクセスできる様、
対象となるユーザーをapacheユーザーグループに追加します。
sftpuser01
の標準のグループを、apache
へと変更します。
※ユーザー名sftpuser01
は適時変更ください
# usermod -g apache sftpuser01
実施前
# cat /etc/passwd | grep sftpuser01 sftpuser01:x:501:501::/home/sftpuser01:/bin/bash
実施後
# cat /etc/passwd | grep sftpuser01 sftpuser01:x:501:48::/home/sftpuser01:/bin/bash
sftpuser01
のプライマリユーザーグループがGID501
から48(apache)
に変わっていることがわかります。
SFTP(sshd)のUmaskを設定する
SFTPからアップロードされたファイルのパーミッションに、グループからの書き込み権限を持たせるため、SFTPのUmaskを変更します。
/etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp /usr/libexec/openssh/sftp-server –u 002
sshdの再起動
# service sshd restart
Apache(httpd)のUmaskを設定する
Apacheが生成するファイルのパーミッションに、グループからの書き込み権限を持たせるため、SFTPのUmaskを変更します。
/etc/sysconfig/httpd
umask 002 #追記
httpd(apache)の再起動
# service httpd restart
下記の様に、Apacheから生成されたファイルのパーミッションが644から664に変わりました。
# ls -lah ## 設定前 -rw-r--r-- 1 apache apache 17 Mar 13 04:55 testfile ## 設定後 -rw-rw-r-- 1 apache apache 17 Mar 13 05:53 testfile2
コンテンツのパーミッションを適切に設定する
最後に既にあるコンテンツ全体のパーミッションを適切に設定します。
- ファイル664
- ディレクトリ775
全てのファイルを手動で変更するのは限界があるので、コマンドラインで一括で行います。
# cd /var/www/html #対象ディレクトリに移動 # find ./ -type f -exec chmod 664 {} \; #対象ディレクトリ以下の全てのファイルを変更 # find ./ -type d -exec chmod 775 {} \; #対象ディレクトリ以下の全てのディレクトリを変更
備考
今回はsftpuser01
のプライマリユーザグループをapache
へと変更しましたが、Apacheの設定(httpd.conf)にてApacheの実行ユーザーの指定が可能です。
User apache Group apache
SFTPのユーザー数が多くなると、専用のグループを設けApacheの実行グループの変更を行うとより効率的かと思います。
Nginxを利用する場合も同様の設定で可能です。
今日のわさび様
春が近づいてきました。わさびちゃんの抜け毛がやばいです。